package edu.config;

import feign.Contract;
import feign.Feign;
import feign.Logger;
import feign.auth.BasicAuthRequestInterceptor;
import feign.hystrix.HystrixFeign;
import org.springframework.cloud.netflix.feign.support.SpringMvcContract;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Scope;

/**
 * Created by JPhoebe on 2017-7-9.
 */

@Configuration
public class FeignConfig {

    @Bean
    public Contract feignContract(){
        /**
         * feign 的 contract
         * 当使用 feign 默认的contract是  springMVC的注解将会失效，只能使用feign的 requestLine 注解
         */
        //return new feign.Contract.Default();

        // springMVC 的 contract
        return new SpringMvcContract();

    }

    /**
     * 当 服务器 设置了认证的时候可以使用一下配置，类解决 认证的问题。
     * */
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor(){
        return new BasicAuthRequestInterceptor("admin","admin");
    }

    /**
     * 配置日志 级别
     */
    @Bean
    public Logger.Level feignLoggerLevel(){
        return Logger.Level.FULL;
    }


    /**
     * 单独禁用某个 feign 的 hystrix 的支持
     * 禁用 hystrix 的支持，则不能使用 fallback
     */
    @Bean
    @Scope("prototype")
    public Feign.Builder feignBuilder(){
        //默认是 hystrix 的builder
        return HystrixFeign.builder();
//        return Feign.builder();
    }

}
